package dac.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpSession;
import dac.model.Categoria;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

public class CategoriaDAO {
    
    private Connection con;
    private HttpSession session;
    
    public CategoriaDAO (Connection con) {
        this.con = con;
    }
    
    public CategoriaDAO (){
    }
    
    /*
    * Lista em Object
    */
    public List<Categoria> listarTodos() throws SQLException {
        List<Categoria> resultado = new ArrayList<Categoria>();
        
        PreparedStatement st = con.prepareStatement("SELECT * FROM categoria");
        ResultSet rs = st.executeQuery();
        
        while (rs.next()) {
            Categoria c = new Categoria();
            c.setId( Integer.parseInt(rs.getString("id")) );
            c.setNome( rs.getString("nome") );
            
            resultado.add(c);
        }
        
        return resultado;
    }
    
    
    /*
    * Lista em JSON
    */
    public String listarTodosJSON() throws SQLException {
        String query = "SELECT c.*, COUNT( p.id ) AS qtd " +
                        "FROM categoria AS c " +
                        "LEFT JOIN produto AS p ON c.id = p.categoria_id " +
                        "GROUP BY c.id ORDER BY c.nome ASC";
        PreparedStatement st = con.prepareStatement(query);
        ResultSet rs = st.executeQuery();
        
        JSONArray jsonArray = new JSONArray();
        
        while (rs.next()) {
            JSONObject jsonObject = new JSONObject();
            
            jsonObject.put("id", Integer.parseInt(rs.getString("id")) );
            jsonObject.put("nome", rs.getString("nome") );
            jsonObject.put("qtd", rs.getString("qtd") );
            
            jsonArray.add(jsonObject);
        }
        
        return jsonArray.toString();
    }
    
    
    /*
     * --
     */
    public String cadastroCategoria (String nome) throws SQLException {
        String query = "INSERT INTO categoria (nome) VALUES ('"+nome+"')";;
              
        PreparedStatement st = con.prepareStatement(query);
        int rs = st.executeUpdate();
        
        if (rs==1) {
            
            return "true";
        }
        
        return "false";
    }
    
    
    /*
     * Metodo que faz a atulizacao dos dados do usuario no banco de dados
     */
    public boolean atualizaCategoria (String SQLValues) throws SQLException {
        Categoria u = (Categoria) session.getAttribute("u");
        String query = "UPDATE usuario SET "+SQLValues+" WHERE id="+u.getId();
              
        PreparedStatement st = con.prepareStatement(query);
        int rs = st.executeUpdate();
        
        if (rs==1) {
            
            return true;
        }
        
        return false;
    }
    
    
    
    public String removerCategoria(String id) throws SQLException{
        PreparedStatement st = con.prepareStatement("DELETE FROM categoria WHERE id="+id);
        int rs = st.executeUpdate();
        
        if (rs==1) {
            return "true"; // Removido
        }
        
        return "false"; // Erro
    }
    
    
    public String editarCategoria(String id, String nome) throws SQLException{
        PreparedStatement st = con.prepareStatement("UPDATE categoria SET nome='"+nome+"' WHERE id="+id);
        int rs = st.executeUpdate();
        
        if (rs==1) {
            return "true"; // Removido
        }
        
        return "false"; // Erro
    }
    
}
